In computer systems running multiple virtual machines (VMs) there is often a need to assign different input/output devices to the different VMs. Currently, input/output memory management unit (IOMMU) technologies allow an administrator to assign I/O device controllers to different VMs in various configurations, and supports address translations for I/O device direct memory access (DMA) data transfers.
Some I/O device controllers support multiple devices. In cases where there may be a need for two distinct I/O devices operating via one common controller to access DMA pages mapped to different VMs, presently-available I/O virtualization solutions introduce significant complexity. For instance, the single root I/O virtualization (SR-IOV) interface introduces a physical function-virtual function dichotomy model into I/O device controllers. The physical function may be made available to one VM, while virtual functionality may be made available to another VM. Due to its circuit complexity, practical SR-IOV devices tend to require a relatively large die size and, consequently, a high cost of fabrication.